package com.objcat.playground.leetcode;

import java.util.ArrayList;
import java.util.List;

/**
 * description: Solution28 <br>
 * date: 2022/3/22 9:18 AM <br>
 * author: objcat <br>
 * version: 1.0 <br>
 */
public class Solution28 {

    /**
     * 题目的意思其实就是把二叉树的结构按层级以数组的形式表示出来
     *       1
     *      / \
     *    2     3
     *   / \   / \
     *  4   5 6   7
     *
     *  就返回
     *  [[1], [2, 3], [4, 5, 6, 7]]
     */

    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        levelHelper(res, root, 0);
        return res;
    }

    public void levelHelper(List<List<Integer>> list, TreeNode root, int level) {
        //边界条件判断
        if (root == null)
            return;
        //level表示的是层数，如果level >= list.size()，说明到下一层了，所以
        //要先把下一层的list初始化，防止下面add的时候出现空指针异常
        if (level >= list.size()) {
            list.add(new ArrayList<>());
        }
        //level表示的是第几层，这里访问到第几层，我们就把数据加入到第几层
        list.get(level).add(root.val);
        //当前节点访问完之后，再使用递归的方式分别访问当前节点的左右子节点
        levelHelper(list, root.left, level + 1);
        levelHelper(list, root.right, level + 1);
    }

    public static void main(String[] args) {
        TreeNode node1 = new TreeNode(2);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(2);
        node1.left = node2;
        node1.right = node3;
        Solution28 solution28 = new Solution28();
        System.out.println(solution28.levelOrder(node1));
    }
}
